home *** CD-ROM | disk | FTP | other *** search
/ HAM Radio 1997 / HAM Radio 1997.iso / vcls / wsanet8a / wsanet / src / ini.c < prev    next >
C/C++ Source or Header  |  1996-04-08  |  14KB  |  566 lines

  1. /* Ini.C - Ini Control */
  2.  
  3. #define INI_C
  4. #include "WSANet.H"
  5. #include "Ini.H"
  6.  
  7. #ifdef DEBUG_BUILD
  8. static char szErrors[256];
  9.  
  10. VOID DEBUGINI(LPSTR lpString)
  11. {
  12.  wsprintf((LPSTR)szErrors, (LPSTR)"Ini: %s\n\r", lpString);
  13.  OutputDebugString( (LPSTR)szErrors );
  14. }
  15. #else
  16. #define DEBUGINI( parm )
  17. #endif /* DEBUG_BUILD */
  18.  
  19.     // Static variables (to save the poor application's stack)
  20. // Only used when you Get or Set Value
  21. static char szSection[MAX_SECTION_SIZE];
  22. static char szEntry[MAX_ENTRY_SIZE];
  23. static char szDefault[MAX_DEFAULT_SIZE];
  24. static char szFilename[MAX_FILENAME_SIZE];
  25. static char szValue[MAX_VALUE_SIZE];
  26.  
  27. /* LONG CALLBACK _export IniCtlProc(HCTL, HWND, UINT, WPARAM, LPARAM);
  28.     Purpose: To handle the VBX messages
  29. */
  30. LONG CALLBACK _export IniCtlProc(HCTL hCtl, HWND hWnd, UINT Msg,
  31.                                        WPARAM wParam, LPARAM lParam)
  32. {
  33.  LPINI lpIni;
  34.  
  35.  lpIni=(LPINI)VBDerefControl(hCtl);
  36.  
  37.  switch(Msg)
  38.  {
  39.  
  40. #ifdef DESIGN_TIME
  41.     // The MODEL want's to know our default size
  42.   case VBM_GETDEFSIZE:
  43.   {
  44.    BITMAP bmp;
  45.    HBITMAP hBitmap;
  46.  
  47.    DEBUGINI("VBM_GETDEFSIZE[2.0] Begin\n\r");
  48.    hBitmap=LoadBitmap(hModDLL, MAKEINTRESOURCE(IDBMP_INI));
  49.    if(hBitmap)
  50.    {
  51.     GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&bmp);
  52.     DeleteObject(hBitmap);
  53.     DEBUGINI((LPSTR)"VBM_GETDEFSIZE[2.0] End\n\r");
  54.     return(MAKELONG(bmp.bmWidth, bmp.bmHeight));
  55.    }
  56.    DEBUGINI((LPSTR)"VBM_GETDEFSIZE[2.0] Allowing DefVBProc to handle\n\r");
  57.   }
  58.   break;
  59.  
  60.     // The re-size message - only in design time
  61.   case WM_SIZE:
  62.   {
  63.    BITMAP bmp;
  64.    HBITMAP hBitmap;
  65.    RECT rect;
  66.    POINT pos;
  67.  
  68.    DEBUGINI((LPSTR)"WM_SIZE Start");
  69.    GetWindowRect(hWnd, (RECT FAR *)&rect);
  70.    pos.x=rect.left;
  71.    pos.y=rect.top;
  72.    ScreenToClient((HWND)GetWindowWord(hWnd, GWW_HWNDPARENT),
  73.                   (POINT FAR *)&pos);
  74.  
  75.    hBitmap=LoadBitmap(hModDLL, MAKEINTRESOURCE(IDBMP_INI));
  76.    if(hBitmap)
  77.    {
  78.     GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&bmp);
  79.     MoveWindow(hWnd, pos.x, pos.y, bmp.bmWidth, bmp.bmHeight,
  80.                SWP_NOZORDER | SWP_NOMOVE);
  81.     DeleteObject(hBitmap);
  82.     DEBUGINI((LPSTR)"WM_SIZE End");
  83.     return(0);
  84.    }
  85.    DEBUGINI((LPSTR)"WM_SIZE End - Bitmap load failure!");
  86.   }
  87.   break;
  88.  
  89.  
  90.     // The paint message - only design time!
  91.   case WM_PAINT:
  92.   {
  93.    PAINTSTRUCT ps;
  94.    BITMAP bmp;
  95.    RECT rect;
  96.    HBITMAP hBitmap,
  97.            hOldBitmap;
  98.    HDC  hdcMem;
  99.  
  100.    DEBUGINI((LPSTR)"WM_PAINT Start");
  101.    if(VBGetMode()==MODE_RUN) break;
  102.  
  103.    GetWindowRect(hWnd, (RECT FAR *)&rect);
  104.    BeginPaint(hWnd, (PAINTSTRUCT FAR *)&ps);
  105.    hBitmap=LoadBitmap(hModDLL, MAKEINTRESOURCE(IDBMP_INI));
  106.    if(hBitmap)
  107.    {
  108.     GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&bmp);
  109.     hdcMem = CreateCompatibleDC(ps.hdc);
  110.     if(hdcMem)
  111.     {
  112.      hOldBitmap=SelectObject(hdcMem, hBitmap);
  113.      BitBlt(ps.hdc, 0, 0, bmp.bmWidth, bmp.bmHeight, hdcMem,
  114.             0, 0, SRCCOPY);
  115.      SelectObject(hdcMem, hOldBitmap);
  116.      DeleteDC(hdcMem);
  117.     }
  118.     DeleteObject(hBitmap);
  119.    }
  120.    EndPaint(hWnd, (PAINTSTRUCT FAR *)&ps);
  121.    DEBUGINI((LPSTR)"WM_PAINT End");
  122.   }
  123.   break;
  124. #endif // DESIGN_TIME
  125.  
  126.  
  127.     // The control is closing - free everything.
  128.   case WM_NCDESTROY:
  129.   {
  130.    MOLE mTemp;
  131.  
  132.    DEBUGINI((LPSTR)"WM_NCDESTROY Begin");
  133.  
  134.    if(lpIni->mSection)
  135.    {
  136.     mTemp = lpIni->mSection;
  137.     DeleteMole(mTemp);
  138.     lpIni=(LPINI)VBDerefControl(hCtl);
  139.     lpIni->mSection = 0;
  140.    }
  141.  
  142.    if(lpIni->mEntry)
  143.    {
  144.     mTemp = lpIni->mEntry;
  145.     DeleteMole(mTemp);
  146.     lpIni=(LPINI)VBDerefControl(hCtl);
  147.     lpIni->mEntry = 0;
  148.    }
  149.  
  150.    if(lpIni->mDefault)
  151.    {
  152.     mTemp = lpIni->mDefault;
  153.     DeleteMole(mTemp);
  154.     lpIni=(LPINI)VBDerefControl(hCtl);
  155.     lpIni->mDefault = 0;
  156.    }
  157.  
  158.    if(lpIni->mFilename)
  159.    {
  160.     mTemp = lpIni->mFilename;
  161.     DeleteMole(mTemp);
  162.     lpIni=(LPINI)VBDerefControl(hCtl);
  163.     lpIni->mFilename = 0;
  164.    }
  165.  
  166.    DEBUGINI((LPSTR)"WM_NCDESTROY End");
  167.   }
  168.   break; // WM_NCDESTROY
  169.  
  170.  
  171.   case VBM_CREATED:
  172.   {
  173.    DEBUGINI((LPSTR)"VBM_CREATED Begin");
  174.  
  175.    lpIni->mSection = 0;
  176.    lpIni->mEntry = 0;
  177.    lpIni->mDefault = 0;
  178.    lpIni->mFilename = 0;
  179.  
  180.    if(VBGetMode()==MODE_RUN)
  181.    {
  182.     ShowWindow(hWnd, SW_HIDE);
  183.    }
  184.    else
  185.    {
  186.     ShowWindow(hWnd, SW_SHOWNA);
  187.    }
  188.  
  189.    DEBUGINI((LPSTR)"VBM_CREATED End");
  190.    return(ERR_None);
  191.   }     // VBM_CREATED
  192.  
  193.  
  194. /**********************************************************************
  195.  ***                        SET PROPERTY                            ***
  196.  **********************************************************************/
  197.   case VBM_SETPROPERTY:
  198.   {
  199.    ERR err;
  200. #ifdef DEBUG_BUILD
  201.    char szError[128];
  202.  
  203.    wsprintf((LPSTR)szError, (LPSTR)"VBM_SETPROPERTY: #%d - Begin",
  204.              wParam);
  205.    DEBUGINI((LPSTR)szError);
  206. #endif /* DEBUG_BUILD */
  207.  
  208.    switch(wParam)
  209.    {
  210.  
  211.     /****************** SET: Section ********************/
  212.     // User is setting the [Section] string
  213.     case IPROP_INI_SECTION:
  214.     {
  215.      MOLE mTemp;
  216.  
  217.      DEBUGINI((LPSTR)"SET: Section - Begin");
  218.  
  219.      mTemp = lpIni->mSection;
  220.      SetMole((LPMOLE)&(mTemp), (LPSTR)lParam);
  221.      lpIni=(LPINI)VBDerefControl(hCtl);
  222.      lpIni->mSection = mTemp;
  223.  
  224.      DEBUGINI((LPSTR)"SET: Section - End");
  225.      return(ERR_None);
  226.     }   // IPROP_INI_SECTION
  227.  
  228.  
  229.     /****************** SET: Entry **********************/
  230.     // User is setting the Entry= string
  231.     case IPROP_INI_ENTRY:
  232.     {
  233.      MOLE mTemp;
  234.  
  235.      DEBUGINI((LPSTR)"SET: Entry - Begin");
  236.  
  237.      mTemp = lpIni->mEntry;
  238.      SetMole((LPMOLE)&(mTemp), (LPSTR)lParam);
  239.      lpIni=(LPINI)VBDerefControl(hCtl);
  240.      lpIni->mEntry = mTemp;
  241.  
  242.      DEBUGINI((LPSTR)"SET: Entry - End");
  243.      return(ERR_None);
  244.     }   // IPROP_INI_ENTRY
  245.  
  246.  
  247.     /****************** SET: Default ********************/
  248.     // User is setting the Default string
  249.     case IPROP_INI_DEFAULT:
  250.     {
  251.      MOLE mTemp;
  252.  
  253.      DEBUGINI((LPSTR)"SET: Default - Begin");
  254.  
  255.      mTemp = lpIni->mDefault;
  256.      SetMole((LPMOLE)&(mTemp), (LPSTR)lParam);
  257.      lpIni=(LPINI)VBDerefControl(hCtl);
  258.      lpIni->mDefault = mTemp;
  259.  
  260.      DEBUGINI((LPSTR)"SET: Default - End");
  261.      return(ERR_None);
  262.     }   // IPROP_INI_DEFAULT
  263.  
  264.  
  265.     /****************** SET: Filename *******************/
  266.     // User is setting the Filename string
  267.     case IPROP_INI_FILENAME:
  268.     {
  269.      MOLE mTemp;
  270.  
  271.      DEBUGINI((LPSTR)"SET: Filename - Begin");
  272.  
  273.      mTemp = lpIni->mFilename;
  274.      SetMole((LPMOLE)&(mTemp), (LPSTR)lParam);
  275.      lpIni=(LPINI)VBDerefControl(hCtl);
  276.      lpIni->mFilename = mTemp;
  277.  
  278.      DEBUGINI((LPSTR)"SET: Filename - End");
  279.      return(ERR_None);
  280.     }   // IPROP_INI_FILENAME
  281.  
  282.  
  283.     /****************** SET: Value **********************/
  284.     // User is setting the Value string
  285.     case IPROP_INI_VALUE:
  286.     {
  287.      LPSTR lpValue;
  288.  
  289.      DEBUGINI((LPSTR)"SET: Value - Begin");
  290.  
  291.      iniRebuildStrings(hCtl, lpIni);
  292.  
  293.      lpValue = (LPSTR)lParam;
  294.  
  295.      if(!WritePrivateProfileString((LPSTR)szSection, (LPSTR)szEntry,
  296.                                   (LPSTR)lpValue, (LPSTR)szFilename))
  297.      {
  298.       DEBUGINI((LPSTR)"SET: Value - End - WritePrivateProfileString() returned FALSE!!");
  299.       return(ERR_None);
  300.      }
  301.  
  302.      DEBUGINI((LPSTR)"SET: Value - End");
  303.      return(ERR_None);
  304.     }   // IPROP_INI_VALUE
  305.  
  306.     default:
  307.     {
  308.      DEBUGINI((LPSTR)"VBM_SETPROPERTY Allowing default actions");
  309.     }
  310.    } // switch(wParam)
  311.   } // VBM_SETPROPERTY
  312.  
  313. /**********************************************************************
  314.  ***                        GET PROPERTY                            ***
  315.  **********************************************************************/
  316.   case VBM_GETPROPERTY:
  317.   {
  318. #ifdef DEBUG_BUILD
  319.    char szError[128];
  320.  
  321.    wsprintf((LPSTR)szError, (LPSTR)"VBM_GETPROPERTY: #%d: Begin",
  322.             wParam);
  323.    DEBUGINI((LPSTR)szError);
  324. #endif /* DEBUG_BUILD */
  325.  
  326.    switch(wParam)
  327.    {
  328.  
  329.     /****************** GET: Section ********************/
  330.     // Get Section property
  331.     case IPROP_INI_SECTION:
  332.     {
  333.      HSZ hszTemp;
  334.  
  335.      DEBUGINI((LPSTR)"GET: Section - Start");
  336.  
  337.      if(!lParam) return(ERR_OUTOFMEMORY);
  338.  
  339.      hszTemp = GetMoleHsz(hCtl, lpIni->mSection);
  340.      if(!hszTemp) return(ERR_OUTOFMEMORY);
  341.  
  342.      *(*(LPHSZ *)&lParam) = hszTemp;
  343.  
  344.      DEBUGINI((LPSTR)"GET: Section - End");
  345.      return(ERR_None);
  346.     }   // IPROP_INI_SECTION
  347.  
  348.  
  349.     /****************** GET: Entry **********************/
  350.     // Get Entry property
  351.     case IPROP_INI_ENTRY:
  352.     {
  353.      HSZ hszTemp;
  354.  
  355.      DEBUGINI((LPSTR)"GET: Entry - Start");
  356.  
  357.      if(!lParam) return(ERR_OUTOFMEMORY);
  358.  
  359.      hszTemp = GetMoleHsz(hCtl, lpIni->mEntry);
  360.      if(!hszTemp) return(ERR_OUTOFMEMORY);
  361.  
  362.      *(*(LPHSZ *)&lParam) = hszTemp;
  363.  
  364.      DEBUGINI((LPSTR)"GET: Entry - End");
  365.      return(ERR_None);
  366.     }   // IPROP_INI_ENTRY
  367.  
  368.  
  369.     /****************** GET: Default ********************/
  370.     // Get Default property
  371.     case IPROP_INI_DEFAULT:
  372.     {
  373.      HSZ hszTemp;
  374.  
  375.      DEBUGINI((LPSTR)"GET: Default - Start");
  376.  
  377.      if(!lParam) return(ERR_OUTOFMEMORY);
  378.  
  379.      hszTemp = GetMoleHsz(hCtl, lpIni->mDefault);
  380.      if(!hszTemp) return(ERR_OUTOFMEMORY);
  381.  
  382.      *(*(LPHSZ *)&lParam) = hszTemp;
  383.  
  384.      DEBUGINI((LPSTR)"GET: Default - End");
  385.      return(ERR_None);
  386.     }   // IPROP_INI_DEFAULT
  387.  
  388.  
  389.     /****************** GET: Filename *******************/
  390.     // Get Filename property
  391.     case IPROP_INI_FILENAME:
  392.     {
  393.      HSZ hszTemp;
  394.  
  395.      DEBUGINI((LPSTR)"GET: Filename - Start");
  396.  
  397.      if(!lParam) return(ERR_OUTOFMEMORY);
  398.  
  399.      hszTemp = GetMoleHsz(hCtl, lpIni->mFilename);
  400.      if(!hszTemp) return(ERR_OUTOFMEMORY);
  401.  
  402.      *(*(LPHSZ *)&lParam) = hszTemp;
  403.  
  404.      DEBUGINI((LPSTR)"GET: Filename - End");
  405.      return(ERR_None);
  406.     }   // IPROP_INI_FILENAME
  407.  
  408.  
  409.     /****************** GET: Value **********************/
  410.     // Get Value from .INI file
  411.     case IPROP_INI_VALUE:
  412.     {
  413.      HSZ hszTemp;
  414.  
  415.      DEBUGINI((LPSTR)"GET: Value - Start");
  416.  
  417.      if(!lParam) return(ERR_OUTOFMEMORY);
  418.  
  419.      iniRebuildStrings(hCtl, lpIni);
  420.  
  421.      if(!GetPrivateProfileString((LPSTR)szSection, (LPSTR)szEntry,
  422.                                  (LPSTR)szDefault, (LPSTR)szValue,
  423.                                  sizeof(szValue), (LPSTR)szFilename))
  424.      {
  425.       DEBUGINI((LPSTR)"GET: Value - End - GetPrivateProfileString() returned 0!");
  426.       hszTemp = GetMoleHsz(hCtl, 0);
  427.      }
  428.      else
  429.      {
  430.       hszTemp = VBCreateHsz((_segment)hCtl, (LPSTR)szValue);
  431.      }
  432.      if(!hszTemp) return(ERR_OUTOFMEMORY);
  433.  
  434.      *(*(LPHSZ *)&lParam) = hszTemp;
  435.  
  436.      DEBUGINI((LPSTR)"GET: Value - End");
  437.      return(ERR_None);
  438.     }   // IPROP_INI_VALUE
  439.  
  440.     default:
  441.     {
  442.      DEBUGINI((LPSTR)"VBM_GETPROPERTY Allowing default actions");
  443.     }
  444.    } // switch(wParam)
  445.   } // VBM_GETPROPERTY
  446.   break;
  447.  
  448. #ifdef DESIGN_TIME
  449. /**********************************************************************
  450.  ***                   CONTEXT SENSITIVE HELP                       ***
  451.  **********************************************************************/
  452.   case VBM_HELP:
  453.   {
  454.    DEBUGINI((LPSTR)"VBM_HELP: Begin");
  455.  
  456.    if(bHelpStdPropEvt(wParam, (LPMODEL)lParam))
  457.         break;
  458.    else return(DisplayHelpTopic(TOPIC_CONTROL_INI, wParam,
  459.                                 (LPMODEL)lParam));
  460.    DEBUGINI((LPSTR)"VBM_HELP: Standard handler allowed");
  461.   }
  462.   break;
  463. #endif // DESIGN_TIME
  464.  
  465. /**********************************************************************
  466.  ***                        METHOD SUPPORT                          ***
  467.  **********************************************************************/
  468.   case VBM_METHOD:
  469.   {
  470.    DEBUGINI((LPSTR)"VBM_METHOD: Begin");
  471.  
  472.    switch(wParam)
  473.    {
  474.     /****************** METHOD: AddItem *****************/
  475.     // Add an item to List
  476.     case METH_ADDITEM:
  477.     {
  478.      DEBUGINI((LPSTR)"METHOD: AddItem - Begin");
  479.  
  480.      DEBUGINI((LPSTR)"METHOD: AddItem - End");
  481.     }
  482.     break; /* METH_ADDITEM */
  483.  
  484.     /****************** METHOD: RemoveItem **************/
  485.     // Remove an item from the list
  486.     case METH_REMOVEITEM:
  487.     {
  488.      DEBUGINI((LPSTR)"METHOD: RemoveItem - Begin");
  489.  
  490.      DEBUGINI((LPSTR)"METHOD: RemoveItem - End");
  491.     }
  492.     break; /* METH_REMOVEITEM */
  493.  
  494.     /****************** METHOD: Clear *******************/
  495.     // Clear a [Section] or a group of entries=
  496.     case METH_CLEAR:
  497.     {
  498.      DEBUGINI((LPSTR)"METHOD: Clear - Begin");
  499.  
  500.      DEBUGINI((LPSTR)"METHOD: Clear - End");
  501.     }
  502.     break; /* METH_CLEAR */
  503.    }
  504.    DEBUGINI((LPSTR)"VBM_METHOD: End - Default method used");
  505.   }
  506.   break;
  507.  
  508.  } // switch(Msg)
  509.  return(VBDefControlProc(hCtl, hWnd, (USHORT)Msg, (USHORT)wParam,
  510.         (LONG)lParam));
  511. } /* IniCtlProc() */
  512.  
  513.  
  514. /* VOID iniRebuildStrings(HCTL, LPINI);
  515.     Purpose: To setup the static strings for usage
  516. */
  517. VOID iniRebuildStrings(HCTL hCtl, LPINI lpIni)
  518. {
  519.  MOLE mTemp;
  520.  
  521.  DEBUGINI((LPSTR)"iniRebuildStrings() - Begin");
  522.  
  523.  *szSection = '\0';
  524.  *szEntry = '\0';
  525.  *szDefault = '\0';
  526.  *szValue = '\0';
  527.  lstrcpy((LPSTR)szFilename, (LPSTR)DEFAULT_FILENAME);
  528.  
  529.  if(!lpIni) return;
  530.  
  531.  if(lpIni->mSection)
  532.  {
  533.   mTemp = lpIni->mSection;
  534.   GetMoleName(mTemp, (LPSTR)szSection, sizeof(szSection));
  535.   lpIni=(LPINI)VBDerefControl(hCtl);
  536.  }
  537.  
  538.  if(lpIni->mEntry)
  539.  {
  540.   mTemp = lpIni->mEntry;
  541.   GetMoleName(mTemp, (LPSTR)szEntry, sizeof(szEntry));
  542.   lpIni=(LPINI)VBDerefControl(hCtl);
  543.  }
  544.  
  545.  if(lpIni->mDefault)
  546.  {
  547.   mTemp = lpIni->mDefault;
  548.   GetMoleName(mTemp, (LPSTR)szDefault, sizeof(szDefault));
  549.   lpIni=(LPINI)VBDerefControl(hCtl);
  550.  }
  551.  
  552.  if(lpIni->mFilename)
  553.  {
  554.   mTemp = lpIni->mFilename;
  555.   GetMoleName(mTemp, (LPSTR)szFilename, sizeof(szFilename));
  556.   lpIni=(LPINI)VBDerefControl(hCtl);
  557.  }
  558.  
  559.  DEBUGINI((LPSTR)"iniRebuildStrings() - End");
  560.  
  561.  return;
  562. } /* iniRebuildStrings() */
  563.  
  564. /* End of Ini.C */
  565.  
  566.